class Student:
    def __init__(self,name,age,sex,address):
        self.name = name
        self.age = age
        self.sex = sex
        self.address = address
    # 绑定方法/动态方法
    @classmethod        # 被修饰的方法，可以通过类名称来直接调用，无需传入对象
    def play(self,type):
        print(f"今天去玩了：{type}")

    @classmethod
    def shopping(cls):      # cls == self ，都是同一个意思，标记了classmethod就会自动变成cls
        print("今天去了商场购物")

    def info(self):
        print("我是info方法")

    # 非绑定方法/ 静态方法
    @staticmethod       # 被修饰的函数，就是一个普通方法/函数，不是类方法
    def add(a,b):
        return a+b


if __name__ == '__main__':
    # 通过Student类来创建s1对象
    s1 = Student('班长',19,'男','黑龙江绥化')

    # 调用普通类方法
    # s1.info()       # 使用对象来调用
    # Student.info(s1)  # 使用类来调用

    # 调用绑定方法
    # s1.play('班长')       # 使用对象来调用
    # Student.play('班长')  # 使用类来调用

    # 调用绑定方法
    # s1.shopping()
    # Student.shopping()

    # 调用静态方法
    # print(s1.add(5, 6))
    # print(Student.add(5, 9))
    """
    绑定方法/动态方法：
    被修饰的方法，可以通过类的名称直接调用，不需要传入对象
    
    非绑定方法/静态方法：
    被修饰的方法，就是普通函数，没有self形参，类和对象都可以直接来调用
    """

